home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / general / modelers / linkedit / linkedit.lha / link-edit / LinkEdit / Choose / command.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-03-13  |  4.6 KB  |  200 lines

  1. #include <stdio.h>
  2.  
  3. void
  4. cutnewline(line)
  5.   char *line;
  6.   int n=strlen(line); 
  7.   if (n>0 && line[n-1]=='\n' && !(line==NULL)) line[n-1]='\0';
  8.   /*fprintf(stderr,"%s %d \n",line,strlen(line));*/
  9. }
  10.  
  11. main(argc,argv)
  12.   int argc;
  13.   char **argv;
  14. { int i,write=0;
  15.   int namesc=0,scount=0;
  16.   char **namesv;
  17.   char *dr;
  18.   FILE *fp,*fin;
  19.   char line[100];
  20.   fp=stdout;
  21.   dr=(char *)malloc(3*sizeof(char));
  22.   strcpy(dr,".");
  23.   *argv++; argc--;
  24.   while (argc-->0)
  25.   {
  26.     if (strcmp(*argv,"-w")==0 || strcmp(*argv,"-write")==0) 
  27.     {
  28.       write=1;
  29.       *argv++;
  30.       continue;
  31.     }
  32.  
  33.     if (strcmp(*argv,"-show")==0 || strcmp(*argv,"-showdir")==0) 
  34.     {
  35.       showdir(1);
  36.       *argv++;
  37.       continue;
  38.     }
  39.  
  40.     if (strcmp(*argv,"-no")==0 || strcmp(*argv,"-noshowdir")==0) 
  41.     {
  42.       showdir(0);
  43.       *argv++;
  44.       continue;
  45.     }
  46.  
  47.     if (strcmp(*argv,"-r")==0 || strcmp(*argv,"-read")==0) 
  48.     {
  49.       write=0;
  50.       *argv++;
  51.       continue;
  52.     }
  53.     if (strcmp(*argv,"-d")==0 || strcmp(*argv,"-dir")==0)
  54.     { 
  55.       *argv++;
  56.       if (argc-->0) 
  57.       {
  58.         free(dr);
  59.         dr=(char *)malloc((strlen(*argv)+2)*sizeof(char));
  60.         strcpy(dr,*argv);
  61.         *argv++;
  62.         continue;
  63.       }
  64.       else
  65.       {
  66.         fprintf(stderr,"directory name not specified\n");
  67.         exit(1);
  68.       }
  69.     }
  70.  
  71.     if (strcmp(*argv,"-n")==0 || strcmp(*argv,"-names")==0)
  72.     {
  73.       if (argc-->0) 
  74.       { *argv++;
  75.         namesc=atoi(*argv);
  76.         if (namesc==0 && (*argv[0]<'0' || *argv[0]>'9')) 
  77.         {
  78.           if (*argv[0]=='-') fin=stdin; else fin=fopen(*argv,"r");
  79.           if (fin==NULL) 
  80.           {
  81.             fprintf(stderr,"Can't open the file %s \n",*argv);
  82.             exit(1);
  83.           }
  84.           if (fgets(line,100,fin)==NULL) 
  85.           { 
  86.             fprintf(stderr,"file is empty! \n");
  87.             exit(1);
  88.           }
  89.           cutnewline(line);
  90.           namesc=atoi(line);
  91.           namesv=(char **)malloc(namesc*sizeof(char *));
  92.           for(i=0; i<namesc; i++)
  93.           {
  94.             if (fgets(line,100,fin)==NULL) 
  95.             { fprintf(stderr,"missing file data"); namesc=i-1;}
  96.             else 
  97.             {
  98.               cutnewline(line);
  99.               *(namesv+i)=(char *)malloc((strlen(line)+2)*sizeof(char));
  100.               strcpy(*(namesv+i),line); 
  101.             }
  102.           }
  103.           if (!(fgets(line,100,fin)==NULL) && !(line[0]=='(')) 
  104.           {
  105.             cutnewline(line);           
  106.             free(dr);
  107.             dr=(char *)malloc((strlen(line)+2)*sizeof(char));
  108.             strcpy(dr,line);
  109.           }          
  110.           *argv++; 
  111.           fclose(fin);
  112.           continue;
  113.         }
  114.         namesv=(char **)malloc(namesc*sizeof(char *));
  115.         *argv++;
  116.         for(i=0; i<namesc; i++)
  117.           if (argc-->0)
  118.           {
  119.             *(namesv+i)=(char *)malloc((strlen(*argv)+2)*sizeof(char));
  120.             strcpy(*(namesv+i),*argv); 
  121.             *argv++;
  122.           }
  123.           else
  124.           {
  125.             fprintf(stderr,"not enough file names\n");
  126.             exit(1);
  127.           }
  128.         continue;
  129.       }
  130.       else
  131.       {
  132.         fprintf(stderr,"no number of files specified\n");
  133.         exit(1);
  134.       }
  135.     }
  136.     if (strcmp(*argv,"-s")==0 || strcmp(*argv,"-suffix")==0)
  137.     {
  138.       if (argc-->0) 
  139.       { *argv++;
  140.         scount=atoi(*argv);
  141.         if (scount==0 && (*argv[0]<'0' || *argv[0]>'9')) 
  142.         {
  143.           if (*argv[0]=='-') fin=stdin; else fin=fopen(*argv,"r");
  144.           if (fin==NULL) 
  145.           {
  146.             fprintf(stderr,"Can't open the file %s \n",*argv);
  147.             exit(1);
  148.           }
  149.           if (fgets(line,100,fin)==NULL) 
  150.           { 
  151.             fprintf(stderr,"file is empty! \n");
  152.             exit(1);
  153.           }
  154.           cutnewline(line);
  155.           scount=atoi(line);
  156.           for(i=0; i<scount; i++)
  157.           {
  158.             if (fgets(line,100,fin)==NULL) 
  159.               fprintf(stderr,"missing file data"); 
  160.             else 
  161.             {
  162.               cutnewline(line);
  163.               addsuff(line); 
  164.             }
  165.           }          
  166.           *argv++; 
  167.           fclose(fin);
  168.           continue;
  169.         }
  170.  
  171.         *argv++;
  172.         for(i=0; i<scount; i++)
  173.           if (argc-->0)
  174.           {  
  175.             addsuff(*argv);
  176.             *argv++;
  177.           }
  178.           else
  179.           {
  180.             fprintf(stderr,"not enough suffix names\n");
  181.             exit(1);
  182.           }
  183.         continue;
  184.       }
  185.       else
  186.       {
  187.         fprintf(stderr,"no number of suffixes specified\n");
  188.         exit(1);
  189.       }
  190.     }
  191.  
  192.   }
  193.   choosefile(&namesc,&namesv,&dr,dr,write);
  194.   fprintf(fp,"%d\n", namesc);
  195.   for(i=0; i<namesc; i++)
  196.     fprintf(fp,"%s\n", *(namesv+i));
  197.   fprintf(fp,"%s\n",dr);
  198.   chfree(&namesc,&namesv);
  199. }